package com.contain.queue;

import java.util.Collections;
import java.util.HashSet;
import java.util.PriorityQueue;
import java.util.Queue;
import java.util.Set;

/**
 * 优先级队列
 * 
 * @author Administrator
 * 
 */
public class PriorityQueueTest {

	public static void printQueue(Queue q) {
		// 返回对头
		while (q.peek() != null) {
			// 移除并返回对头
			System.out.println(q.remove());
		}
	}

	public static void main(String[] args) {
		// 默认没有设置优先级的情况
		PriorityQueue<Integer> q = new PriorityQueue<Integer>();
		for (int i = 0; i < 10; i++) {
			// 在允许的情况下，将一个元素插入到队尾
			q.offer(i);
		}
		printQueue(q);
		System.out.println("=================");
		System.out.println(q);
		System.out.println("=================");

		// 数字越大，优先级越高
		q = new PriorityQueue<Integer>(10, Collections.reverseOrder());// Collections.reverseOrder()反序
		for (int i = 0; i < 10; i++) {
			// 在允许的情况下，将一个元素插入到队尾
			q.offer(i);
		}
		printQueue(q);
		System.out.println("=================");

		PriorityQueue<String> qs = new PriorityQueue<String>(10,
				Collections.reverseOrder());// Collections.reverseOrder()反序
		for (String s : "my z name is zhang su lei".split(" ")) {
			// 在允许的情况下，将一个元素插入到队尾
			qs.offer(s);
		}
		printQueue(qs);
		System.out.println("=================");

		Set<String> ss = new HashSet<String>();
		for (String s : "my zhang name is zhang su lei".split(" ")) {
			// 在允许的情况下，将一个元素插入到队尾
			ss.add(s);
		}
		qs = new PriorityQueue<String>(ss);
		printQueue(qs);
	}

}
